package reflect;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 * 通过反射机制获取Method对应的方法信息
 */
public class ReflectDemo6 {
    public static void main(String[] args) throws Exception {
        Class cls = Class.forName("reflect.Person");//获取类对象
        Method method = cls.getMethod("say",String.class,int.class);//获取方法对象

        String name = method.getName();//获取方法名
        System.out.println("方法名: "+name);

        Class returnType = method.getReturnType();//获取返回值类型
        System.out.println("方法的返回值类型: "+returnType);

        int count = method.getParameterCount();//获取参数个数
        System.out.println("参数个数: "+count);

        Class[] types = method.getParameterTypes();//获取参数类型
        for (Class type : types) {//遍历参数类型
            System.out.println("参数类型: "+type);
        }

        int modifiers =  method.getModifiers();//获取方法的访问修饰符
        switch(modifiers){//判断访问修饰符
            case Modifier.PUBLIC://公开方法
                System.out.println("这是一个公开的方法");
                break;
            case Modifier.PRIVATE://私有方法
                System.out.println("这是一个私有的方法");
                break;
            case Modifier.PROTECTED://受保护的方法
                System.out.println("这是一个受保护的方法");
                break;
        }

    }
}
